﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ENProyectoSIETE;
using CADProyectoSIETE.Properties;
using System.Configuration;
using System.Data;
using System.Data.Sql;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SqlTypes;

namespace CADProyectoSIETE
{
    public class PersonajeCAD
    {
        SqlConnection conexion = new SqlConnection(Settings.Default.BDProyecto7ConnectionString);

        public string insertarPersonaje(ENPersonaje personaje)
        {
            //string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            //SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from Personaje ", conexion);
                da.Fill(bdvirtual, "personaje"); //dataset con el nombre de personaje
                //Obtenemos la tabla personajes
                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["personaje"];
                //Creamos la nueva fila a insertar
                DataRow nuevafila = tabla.NewRow();

                nuevafila[1] = personaje.TipoPersonaje;
                nuevafila[2] = personaje.AtaquePersonaje;
                nuevafila[3] = personaje.VidaPersonaje;
                nuevafila[4] = personaje.DefensaPersonaje;


                tabla.Rows.Add(nuevafila);

                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                da.Update(bdvirtual, "personaje");


            }
            catch (Exception ex)
            {
                return ex.Message;
            }
            finally
            {
                conexion.Close();
            }

            conexion.Close();
            return "OK";
        }

        public string borrarPersonaje(ENPersonaje personaje)
        {
            int i = 0;

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from Personaje ", conexion);

                da.Fill(bdvirtual, "personaje");
                //Obtenemos la tabla personajes
                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["personaje"];

                foreach (DataRow registro in tabla.Rows)
                {
                    if ((int)registro["idPersonaje"] == personaje.IdPersonaje)
                    {
                        tabla.Rows[i].Delete();
                    }
                    i++;
                }

                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                da.Update(bdvirtual, "personaje");
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
            finally
            {
                conexion.Close();
            }

            conexion.Close();
            return "OK";
        }

        public string editarPersonaje(ENPersonaje personaje)
        {
            //string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            //SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                int i = 0;
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from Personaje", conexion);
                da.Fill(bdvirtual, "personaje"); //dataset con el nombre de personaje
                //Obtenemos la tabla personajes
                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["personaje"];
                //tabla.Rows.

                foreach (DataRow registro in tabla.Rows)
                {
                    if ((int)registro["idPersonaje"] == personaje.IdPersonaje)
                    {
                        tabla.Rows[i][1] = personaje.TipoPersonaje;
                        tabla.Rows[i][2] = personaje.AtaquePersonaje;
                        tabla.Rows[i][3] = personaje.VidaPersonaje;
                        tabla.Rows[i][4] = personaje.DefensaPersonaje;
                    }
                    i++;
                }


                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                da.Update(bdvirtual, "personaje");

            }
            catch (Exception ex)
            {
                return ex.Message;
            }
            finally
            {
                conexion.Close();
            }

            conexion.Close();
            return "OK";
        }

        public ENPersonaje obtenerPersonaje(int index)
        {

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from personaje where idPersonaje=" + index.ToString(), conexion);

                da.Fill(bdvirtual, "personaje");
                ENPersonaje personaje = new ENPersonaje("tipo", 0, 0, 0);

                foreach (DataRow registro in bdvirtual.Tables["personaje"].Rows)
                {
                    personaje.IdPersonaje = int.Parse(registro[0].ToString());
                    personaje.TipoPersonaje = registro[1].ToString();
                    personaje.AtaquePersonaje = int.Parse(registro[2].ToString());
                    personaje.VidaPersonaje = int.Parse(registro[3].ToString());
                    personaje.DefensaPersonaje = int.Parse(registro[3].ToString());

                }

                return personaje;
            }
            catch
            {
                ENPersonaje personajeerror = new ENPersonaje("tipo", 0, 0, 0);
                return personajeerror;
            }
            finally
            {
                conexion.Close();
            }
        }

        public DataTable obtenerPersonajeNombre(string nombre, int vidadesde=-1, int vidahasta=-1)
        {
            
            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = null;
                if (vidadesde == -1 && vidahasta == -1)
                {
                    da = new SqlDataAdapter("select * from personaje where tipoPersonaje LIKE '%" + nombre + "%'", conexion);
                }
                else if (vidadesde == -1)
                {
                    da = new SqlDataAdapter("select * from personaje where vidaPersonaje<=" + vidahasta + " AND tipoPersonaje LIKE '%" + nombre + "%'", conexion);
                }
                else if (vidahasta == -1)
                {
                    da = new SqlDataAdapter("select * from personaje where vidaPersonaje>" + vidadesde + " AND tipoPersonaje LIKE '%" + nombre + "%'", conexion);
                }
                else
                {
                    da = new SqlDataAdapter("select * from personaje where vidaPersonaje<=" + vidahasta + " AND vidaPersonaje>" + vidadesde + " AND tipoPersonaje LIKE '%" + nombre + "%'", conexion);
                }
                da.Fill(bdvirtual, "personaje");
                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["personaje"];

               /* ENUsuario usuario = new ENUsuario();

                foreach (DataRow registro in bdvirtual.Tables["personaje"].Rows)
                {
                    usuario.IdUsuario = int.Parse(registro[0].ToString());
                    usuario.NombreUsuario = registro[1].ToString();
                    usuario.ClaveUsuario = registro[2].ToString();
                    usuario.PersonajeUsuario = int.Parse(registro[3].ToString());
                    usuario.CorreoUsuario = registro[4].ToString();
                    usuario.ExperienciaUsuario = int.Parse(registro[5].ToString());
                    usuario.DineroUsuario = int.Parse(registro[6].ToString());
                    usuario.NivelUsuario = int.Parse(registro[7].ToString());
                }
                */
                return tabla;
            }
            catch
            {
                DataTable tablavacia = new DataTable();
                return tablavacia;
            }
            finally
            {
                conexion.Close();
            }
        }

        public DataSet obtenerPersonajes()
        {
            try
            {
                DataSet bd = new DataSet();

                SqlDataAdapter da = new SqlDataAdapter("select * from Personaje", conexion);
                da.Fill(bd, "personaje");
                return bd;
            }

            catch (Exception ex)
            {
                DataSet bd = new DataSet();
                throw ex;
            }
            finally
            {
                conexion.Close();
            }
        }

    }
}
